//package work.rightAnswer;
//
//import java.util.*;
//
//class Solution {
//    public int[] findOrder(int numCourses, int[][] prerequisites) {
//        Graph graph = createGraph(prerequisites);
//        HashMap<Integer,Node> hashMap = graph.hashMap;
//
//        for (int i = 0; i < numCourses; i++) {
//            if(!hashMap.containsKey(i)){
//                Node node = new Node(i);
//                hashMap.put(i,node);
//            }
//        }
//
//
//        int[] res = new int[numCourses];
//        int index = 0;
//        //遍历graph的节点，将入度为0的节点放入
//        Queue<Node> queue = new LinkedList<>();
//        for (Node value : graph.hashMap.values()) {
//            if(value.in==0){
//                queue.offer(value);
//            }
//        }
//
//
//        while (!queue.isEmpty()){
//            //遍历队列，每次去除一个节点的影响
//            //1.node 为当前出队节点，nexts为node的nexts属性，将nexts每个元素入度减1，如果入度为0了，那么将目前元素放入queue中
//            Node node = queue.poll();
//            res[index++] = node.value;
//            for (Node next : node.nexts) {
//                next.in--;
//                if(next.in==0){
//                    queue.offer(next);
//                }
//            }
//            //2.hashMap删除node节点
//            hashMap.remove(node.value);
//        }
//
//        return index==numCourses?res:new int[]{};
//    }
//
//    //因为单个独立节点一定可以学习，所以忽略，不放入图中
//    //创建图
//    public Graph createGraph(int[][] prerequisites){
//        Graph graph = new Graph();
//        HashMap<Integer,Node> hashMap = graph.hashMap;
//        //遍历prerequisites，prerequisites[i][0]为prerequisites[i][1]的next节点
//        for (int i = 0; i < prerequisites.length; i++) {
//            //1.判断对应节点是否存在 hashMap.containskey() 存在就取出 不存在就新建一个节点
//            int from = prerequisites[i][1];
//            int to = prerequisites[i][0];
//            if(!hashMap.containsKey(from)){
//                hashMap.put(from,new Node(from));
//            }
//            if(!hashMap.containsKey(to)){
//                hashMap.put(to,new Node(to));
//            }
//            //2. fromNode toNode 分别表示 prerequisites[i][1] prerequisites[i][0] 节点
//            Node fromNode = hashMap.get(from);
//            Node toNode = hashMap.get(to);
//            //2.1.fromNode.nexts.add(toNode)
//            fromNode.nexts.add(toNode);
//            //2.2 toNode.in++
//            toNode.in++;
//        }
//
//        return graph;
//    }
//}
//
//class Graph{
//    //点集
//    HashMap<Integer,Node> hashMap;
//
//    public Graph(){
//        hashMap = new HashMap<>();
//    }
//}
//
//class Node{
//    //节点值
//    int value;
//    //当前节点指向的点集
//    List<Node> nexts;
//    //入度
//    int in;
//
//    public Node(int value){
//        this.value = value;
//        nexts = new ArrayList<>();
//        in = 0;
//    }
//}
//
